const axios = require('axios')

module.exports = {
  init: ({
    isFormData = false, // 是否是formdata数据
    method = 'GET',
    url,
    params,
    timeout = 3000
  }) => {
    let baseURL = 'http://localhost:8022'
    let contentType = ''
    if (isFormData) {
      contentType = 'multipart/form-data;charset=UTF-8'
    } else {
      contentType = 'application/x-www-form-urlencoded;charset=UTF-8'
    }
    // 创建自定义axios实例
    let instance = axios.create({
      baseURL,
      timeout,
      headers: {
        // 如果不显示的设置Content-Type，那么默认是text/plain,使用表单形式提交'multipart/form-data'（即FormData提交的参数）
        'Content-Type': contentType
      },
      transformRequest: [function (data) {
        if (isFormData) {
          return data
        } else {
          let ret = ''
          for (let key in data) {
          // 值为空
            if (data[key] === null || data[key] === '' || data[key] === undefined) {
              ret += key + '=&'
            } else if ((typeof data[key]) === 'number') { // 值为number类型
              ret += key + '=' + data[key] + '&'
            } else {
              ret += key + '=' + encodeURIComponent(data[key]) + '&'
            }
          }
          return ret
        }
      }]
    })

    // 创建请求拦截器，可以再发送请求之前做些处理
    instance.interceptors.request.use(config => {
      return config
    }, error => {
      return Promise.reject(error)
    })

    // 创建响应拦截器，在响应被then方法执行之前做处理
    instance.interceptors.response.use(response => {
      return response.data
    }, error => {
      return Promise.reject(error)
    })

    let axiosConfig = {
      url, // `url` 是用于请求的服务器 URL
      method// `method` 是创建请求时使用的方法
    }
    if (method === 'POST') { // POST请求传参
      axiosConfig.data = params
    } else { // GET请求传参
      axiosConfig.params = params
    }

    return new Promise((resolve, reject) => {
      instance(axiosConfig).then(function (res) {
        switch (res.code) {
          case 200: // 成功
          case 400: // 失败
          case 401: // 业务失败
          default:
            resolve(res)
            break
        }
      }).catch(function (err) {
        reject(err)
      })
    })
  }
}
